jvm what are they and what are their differences